home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / normalalien.s < prev    next >
Text File  |  1997-11-28  |  15KB  |  919 lines

  1. ItsANasty:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  
  10.  move.w #$1f1f,14(a0)
  11.  
  12.  move.b worry(a0),d0
  13.  move.b d0,d1
  14.  and.w #128,d1
  15.  and.b #127,d0
  16.  sub.b #1,d0
  17.  bge.s .oknn
  18.  move.b #0,d0
  19. .oknn: 
  20.  add.b d0,d1
  21.  move.b d1,worry(a0)
  22.  
  23.  move.w (a0),CollId
  24.  move.w #80,extlen
  25.  move.b #1,awayfromwall
  26.  
  27.  move.l #20*256,StepUpVal
  28.  move.l #20*256,StepDownVal
  29.  move.l #80*128,thingheight
  30.  move.l #4,deadframe
  31.  move.w #0,screamsound
  32.  move.w #40,nasheight
  33.  clr.b gotgun
  34.  move.w 12(a0),d2
  35.  bge.s .stillalive
  36. .notthisone:
  37.  move.w 12(a0),GraphicRoom(a0)
  38.  rts
  39. .stillalive:
  40.  
  41.  tst.b numlives(a0)
  42.  bgt .notdying
  43.  
  44.  move.w ThirdTimer(a0),d1
  45.  sub.w TempFrames,d1
  46.  bge.s .noneg
  47.  move.w #0,d1
  48. .noneg:
  49.  move.w d1,ThirdTimer(a0)
  50.  
  51.  move.w .dyinganim(pc,d1.w*2),10(a0)
  52.  
  53.  move.b #0,numlives(a0)
  54.  move.l ZoneAdds,a1
  55.  move.l (a1,d2.w*4),a1
  56.  add.l LEVELDATA,a1
  57.  
  58.  move.l ToZoneFloor(a1),d0
  59.  tst.b ObjInTop(a0)
  60.  beq.s .notintop
  61.  move.l ToUpperFloor(a1),d0
  62. .notintop:
  63.  asr.l #7,d0
  64.  sub.w #64,d0
  65.  move.w d0,4(a0)
  66.  move.w 12(a0),GraphicRoom(a0)
  67.  rts
  68.  
  69. .dyinganim:
  70.  dcb.w 11,33
  71.  dcb.w 15,32
  72.  
  73.  
  74. .notdying: 
  75.  
  76.  tst.b 17(a0)
  77.  beq.s .cantseeplayer
  78.  tst.w ThirdTimer(a0)
  79.  ble NastyAttack
  80.  move.w TempFrames,d0
  81.  sub.w d0,ThirdTimer(a0)
  82.  bra .waitandsee
  83.  
  84. .cantseeplayer:
  85.  
  86.  jsr GetRand
  87.  lsr.w #4,d0
  88.  and.w #63,d0
  89.  add.w #20,d0
  90.  move.w d0,ThirdTimer(a0)
  91.  
  92. .waitandsee:
  93.  
  94.  move.w #25,FourthTimer(a0)
  95.  
  96.  move.w 12(a0),d2
  97.  move.l ZoneAdds,a5
  98.  move.l (a5,d2.w*4),d0
  99.  add.l LEVELDATA,d0
  100.  move.l d0,objroom
  101.  
  102.  jsr ViewpointToDraw
  103.  
  104.  asl.l #2,d0
  105.  add.l alframe,d0
  106.  
  107.  move.l d0,8(a0)
  108.  
  109.  move.w 4(a0),d0
  110.  sub.w #40,d0
  111.  ext.l d0
  112.  asl.l #7,d0
  113.  move.l d0,newy
  114.  move.l d0,oldy
  115.  
  116.  move.w 12(a0),FromZone
  117.  bsr CheckTeleport
  118.  tst.b OKTEL
  119.  beq.s .notel
  120.  move.l floortemp,d0
  121.  asr.l #7,d0
  122.  add.w d0,4(a0)
  123.  bra .nochangedir
  124. .notel:
  125.  
  126.  move.w maxspd(a0),d2
  127.  muls TempFrames,d2
  128.  move.w d2,speed
  129.  move.w Facing(a0),d0
  130.  move.b ObjInTop(a0),StoodInTop
  131.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  132.  jsr GoInDirection
  133.  move.w #%1000000000,wallflags
  134.  
  135.  move.l #%111111110111100001,CollideFlags
  136.  bsr Collision
  137.  tst.b hitwall
  138.  beq.s .canmove
  139.  
  140.  move.w oldx,newx
  141.  move.w oldz,newz
  142.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  143.  bra .hitathing
  144.  
  145. .canmove:
  146.  
  147.  clr.b wallbounce
  148.  jsr MoveObject
  149.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  150.  move.b StoodInTop,ObjInTop(a0)
  151.  
  152. .hitathing:
  153.  
  154.  tst.b hitwall
  155.  beq.s .nochangedir
  156.  move.w #-1,ObjTimer(a0)
  157. .nochangedir
  158.  
  159.  move.l objroom,a2
  160.  move.w (a2),12(a0)
  161.  move.w newx,(a1)
  162.  move.w newz,4(a1)
  163.  
  164.  move.w (a2),d0
  165.  move.l #ZoneBrightTable,a5
  166.  move.l (a5,d0.w*4),d0
  167.  tst.b ObjInTop(a0)
  168.  bne.s .okbit
  169.  swap d0
  170. .okbit:
  171.  move.w d0,2(a0)
  172.  
  173.  move.l ToZoneFloor(a2),d0
  174.  tst.b ObjInTop(a0)
  175.  beq.s .notintopp
  176.  move.l ToUpperFloor(a2),d0
  177. .notintopp:
  178.  asr.l #7,d0
  179.  sub.w #40,d0
  180.  move.w d0,4(a0)
  181.  
  182.  moveq #0,d2
  183.  move.b damagetaken(a0),d2
  184.  beq .noscream
  185.  
  186.  sub.b d2,numlives(a0)
  187.  bgt .notdeadyet
  188.  
  189.  cmp.b #1,d2
  190.  ble .noexplode
  191.  
  192.  movem.l d0-d7/a0-a6,-(a7)
  193.  sub.l ObjectPoints,a1
  194.  add.l #ObjRotated,a1
  195.  move.l (a1),Noisex
  196.  move.w #400,Noisevol
  197.  move.w #14,Samplenum
  198.  move.b #1,chanpick
  199.  clr.b notifplaying
  200.  st backbeat
  201.  move.b 1(a0),IDNUM
  202.  jsr MakeSomeNoise
  203.  movem.l (a7)+,d0-d7/a0-a6
  204.  
  205.  movem.l d0-d7/a0-a6,-(a7)
  206.  move.w #0,d0
  207.  asr.w #2,d2
  208.  tst.w d2
  209.  bgt.s .ko
  210.  moveq #1,d2
  211. .ko:
  212.  move.w #31,d3
  213.  jsr ExplodeIntoBits
  214.  movem.l (a7)+,d0-d7/a0-a6
  215.  
  216.  cmp.b #40,d2
  217.  blt .noexplode
  218.  
  219.  move.w #-1,12(a0)
  220.  move.w 12(a0),GraphicRoom(a0)
  221.  rts
  222.  
  223. .noexplode:
  224.  
  225.  movem.l d0-d7/a0-a6,-(a7)
  226.  sub.l ObjectPoints,a1
  227.  add.l #ObjRotated,a1
  228.  move.l (a1),Noisex
  229.  move.w #200,Noisevol
  230.  move.w screamsound,Samplenum
  231.  move.b #1,chanpick
  232.  clr.b notifplaying
  233.  st backbeat
  234.  move.b 1(a0),IDNUM
  235.  jsr MakeSomeNoise
  236.  PROTICHECK a1
  237.  movem.l (a7)+,d0-d7/a0-a6
  238.  
  239.  move.w #25,ThirdTimer(a0)
  240.  move.w 12(a0),GraphicRoom(a0) 
  241.  rts
  242.  
  243. .notdeadyet:
  244.  clr.b damagetaken(a0)
  245.  movem.l d0-d7/a0-a6,-(a7)
  246.  sub.l ObjectPoints,a1
  247.  add.l #ObjRotated,a1
  248.  move.l (a1),Noisex
  249.  move.w #200,Noisevol
  250.  move.w screamsound,Samplenum
  251.  move.b #1,chanpick
  252.  clr.b notifplaying
  253.  move.b 1(a0),IDNUM
  254.  st backbeat
  255.  jsr MakeSomeNoise
  256.  movem.l (a7)+,d0-d7/a0-a6
  257.  
  258. .noscream
  259.  
  260.  
  261.  move.w TempFrames,d0
  262.  sub.w d0,ObjTimer(a0)
  263.  bge.s .keepsamedir
  264.  
  265.  jsr GetRand
  266.  and.w #8190,d0
  267.  move.w d0,Facing(a0)
  268.  move.w #50,ObjTimer(a0)
  269.  
  270. .keepsamedir:
  271.  
  272.  move.w TempFrames,d0
  273.  sub.w d0,SecTimer(a0)
  274.  bge.s .nohiss
  275.  
  276.  jsr GetRand
  277.  lsr.w #6,d0
  278.  and.w #1,d0
  279.  add.w #17,d0
  280.  movem.l d0-d7/a0-a6,-(a7)
  281.  sub.l ObjectPoints,a1
  282.  add.l #ObjRotated,a1
  283.  move.l (a1),Noisex
  284.  move.w #100,Noisevol
  285.  move.w d0,Samplenum
  286.  move.b #1,chanpick
  287.  clr.b notifplaying
  288.  move.b 1(a0),IDNUM
  289.  st backbeat
  290.  jsr MakeSomeNoise
  291.  movem.l (a7)+,d0-d7/a0-a6
  292.  
  293.  Jsr GetRand
  294.  lsr.w #6,d0
  295.  and.w #255,d0
  296.  add.w #300,d0
  297.  move.w d0,SecTimer(a0)
  298.  
  299. .nohiss:
  300.  
  301.  move.b ObjInTop(a0),ViewerTop
  302.  move.b PLR1_StoodInTop,TargetTop
  303.  move.l PLR1_Roompt,ToRoom
  304.  move.l objroom,FromRoom
  305.  move.w newx,Viewerx
  306.  move.w newz,Viewerz
  307.  move.w PLR1_xoff,Targetx
  308.  move.w PLR1_zoff,Targetz
  309.  move.l PLR1_yoff,d0
  310.  asr.l #7,d0
  311.  move.w d0,Targety
  312.  move.w 4(a0),Viewery
  313.  jsr CanItBeSeen
  314.  
  315.  clr.b 17(a0)
  316.  
  317.  tst.b CanSee
  318.  beq .carryonprowling
  319.  
  320.  move.b #1,17(a0)
  321.  
  322. .carryonprowling:
  323.  
  324.  move.b ObjInTop(a0),ViewerTop
  325.  move.b PLR2_StoodInTop,TargetTop
  326.  move.l PLR2_Roompt,ToRoom
  327.  move.l objroom,FromRoom
  328.  move.w newx,Viewerx
  329.  move.w newz,Viewerz
  330.  move.w PLR2_xoff,Targetx
  331.  move.w PLR2_zoff,Targetz
  332.  move.l PLR2_yoff,d0
  333.  asr.l #7,d0
  334.  move.w d0,Targety
  335.  move.w 4(a0),Viewery
  336.  jsr CanItBeSeen
  337.  
  338.  tst.b CanSee
  339.  beq .carryonprowling2
  340.  
  341.  or.b #2,17(a0)
  342.  
  343. .carryonprowling2:
  344.  
  345.  move.w 12(a0),GraphicRoom(a0)
  346.  rts
  347.  
  348. NastyAttack:
  349.  
  350.  move.w 12(a0),d2
  351.  move.l ZoneAdds,a5
  352.  move.l (a5,d2.w*4),d0
  353.  add.l LEVELDATA,d0
  354.  move.l d0,objroom
  355.  jsr ViewpointToDraw
  356.  asl.l #2,d0
  357.  add.l alframe,d0
  358.  move.l d0,8(a0)
  359.  
  360.  btst #0,17(a0)
  361.  beq NastyAttackPLR2
  362.  btst #1,17(a0)
  363.  beq NastyAttackPLR1
  364.  
  365.  move.l ObjectPoints,a1
  366.  move.w (a0),d0
  367.  move.w (a1,d0.w*8),d1
  368.  move.w 4(a1,d0.w*8),d2
  369.  
  370.  move.w PLR1_xoff,d3
  371.  move.w PLR1_zoff,d4
  372.  sub.w d1,d3
  373.  sub.w d2,d4
  374.  muls d3,d3
  375.  muls d4,d4
  376.  add.l d4,d3
  377.  move.w PLR2_xoff,d4
  378.  move.w PLR2_zoff,d5
  379.  sub.w d1,d4
  380.  sub.w d2,d5
  381.  muls d4,d4
  382.  muls d5,d5
  383.  add.l d5,d4
  384.  cmp.l d3,d4
  385.  ble NastyAttackPLR2
  386.  
  387.  
  388. NastyAttackPLR1:
  389.  
  390.  move.w 12(a0),FromZone
  391.  bsr CheckTeleport
  392.  tst.b OKTEL
  393.  beq.s .notel
  394.  move.l floortemp,d0
  395.  asr.l #7,d0
  396.  add.w d0,4(a0)
  397.  bra .NoMunch
  398. .notel:
  399.  
  400.  move.w PLR1_xoff,newx
  401.  move.w PLR1_zoff,newz
  402.  move.w PLR1_sinval,tempsin
  403.  move.w PLR1_cosval,tempcos
  404.  move.w p1_xoff,tempx
  405.  move.w p1_zoff,tempz
  406.  jsr RunAround
  407.  
  408.  move.w (a0),d1
  409.  move.l #ObjRotated,a6
  410.  move.l ObjectPoints,a1
  411.  lea (a1,d1.w*8),a1
  412.  lea (a6,d1.w*8),a6
  413.  move.w (a1),oldx
  414.  move.w 4(a1),oldz
  415.  move.w maxspd(a0),d2
  416.  muls.w TempFrames,d2
  417.  move.w d2,speed
  418.  move.w #160,Range
  419.  move.w 4(a0),d0
  420.  ext.l d0
  421.  asl.l #7,d0
  422.  sub.l #40*128,d0
  423.  move.l d0,newy
  424.  move.l d0,oldy
  425.  
  426.  move.b ObjInTop(a0),StoodInTop
  427.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  428.  clr.b canshove
  429.  clr.b GotThere
  430.  jsr HeadTowardsAng
  431.  move.w #%1000000000,wallflags
  432.  
  433.  move.l #%100000,CollideFlags
  434.  jsr Collision
  435.  tst.b hitwall
  436.  beq.s .nothitplayer
  437.  
  438.  move.w oldx,newx
  439.  move.w oldz,newz
  440.  st GotThere
  441.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  442.  bra .hitathing
  443.  
  444. .nothitplayer:
  445.  
  446.  move.l #%11111111110111000001,CollideFlags
  447.  jsr Collision
  448.  tst.b hitwall
  449.  beq.s .canmove
  450.  
  451.  move.w oldx,newx
  452.  move.w oldz,newz
  453.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  454.  bra .hitathing
  455.  
  456. .canmove:
  457.  
  458.  clr.b wallbounce
  459.  Jsr MoveObject
  460.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  461.  move.b StoodInTop,ObjInTop(a0)
  462.  
  463.  move.w AngRet,Facing(a0)
  464.  
  465. .hitathing:
  466.  
  467.  tst.b GotThere 
  468.  beq.s .NoMunch
  469.  tst.w FourthTimer(a0)
  470.  ble.s .OKtomunch
  471.  move.w TempFrames,d0
  472.  sub.w d0,FourthTimer(a0)
  473.  bra.s .NoMunch
  474. .OKtomunch:
  475.  move.w #20,FourthTimer(a0)
  476.  move.l PLR1_Obj,a2
  477.  add.b #2,damagetaken(a2)
  478.  
  479. .NoMunch: 
  480.  
  481.  move.l objroom,a2
  482.  move.w (a2),12(a0)
  483.  move.w newx,(a1)
  484.  move.w newz,4(a1)
  485.  
  486.  move.w (a2),d0
  487.  move.l #ZoneBrightTable,a5
  488.  move.l (a5,d0.w*4),d0
  489.  tst.b ObjInTop(a0)
  490.  bne.s .okbit
  491.  swap d0
  492. .okbit:
  493.  move.w d0,2(a0)
  494.  
  495.  move.l ToZoneFloor(a2),d0
  496.  tst.b ObjInTop(a0)
  497.  beq.s .notintop
  498.  move.l ToUpperFloor(a2),d0
  499. .notintop:
  500.  sub.l #40*128,d0
  501.  asr.l #7,d0
  502.  move.w d0,4(a0)
  503.  
  504.  moveq #0,d2
  505.  move.b damagetaken(a0),d2
  506.  beq .noscream
  507.  
  508.  sub.b d2,numlives(a0)
  509.  bgt .notdeadyet
  510.  
  511.  cmp.b #1,d2
  512.  ble .noexplode
  513.  
  514.  movem.l d0-d7/a0-a6,-(a7)
  515.  sub.l ObjectPoints,a1
  516.  add.l #ObjRotated,a1
  517.  move.l (a1),Noisex
  518.  move.w #400,Noisevol
  519.  move.w #14,Samplenum
  520.  move.b #1,chanpick
  521.  clr.b notifplaying
  522.  st backbeat
  523.  move.b 1(a0),IDNUM
  524.  jsr MakeSomeNoise
  525.  movem.l (a7)+,d0-d7/a0-a6
  526.  
  527.  movem.l d0-d7/a0-a6,-(a7)
  528.  move.w #0,d0
  529.  asr.w #2,d2
  530.  tst.w d2
  531.  bgt.s .ko
  532.  moveq #1,d2
  533. .ko:
  534.  move.w #31,d3
  535.  jsr ExplodeIntoBits
  536.  PROTLCHECK a5
  537.  movem.l (a7)+,d0-d7/a0-a6
  538.  
  539.  cmp.b #40,d2
  540.  blt .notgone
  541.  
  542.  move.w #-1,12(a0)
  543.  move.w 12(a0),GraphicRoom(a0)
  544.  rts
  545.  
  546. .noexplode:
  547.  
  548.  movem.l d0-d7/a0-a6,-(a7)
  549.  sub.l ObjectPoints,a1
  550.  add.l #ObjRotated,a1
  551.  move.l (a1),Noisex
  552.  move.w #200,Noisevol
  553.  move.w screamsound,Samplenum
  554.  move.b #1,chanpick
  555.  clr.b notifplaying
  556.  st backbeat
  557.  move.b 1(a0),IDNUM
  558.  jsr MakeSomeNoise
  559.  movem.l (a7)+,d0-d7/a0-a6
  560.  
  561. .notgone:
  562.  move.b #0,numlives(a0)
  563.  move.w #25,ThirdTimer(a0)
  564.  
  565.  move.w 12(a0),GraphicRoom(a0)
  566.  rts
  567.  
  568. .notdeadyet:
  569.  clr.b damagetaken(a0)
  570.  movem.l d0-d7/a0-a6,-(a7)
  571.  sub.l ObjectPoints,a1
  572.  add.l #ObjRotated,a1
  573.  move.l (a1),Noisex
  574.  move.w #200,Noisevol
  575.  move.w screamsound,Samplenum
  576.  move.b #1,chanpick
  577.  clr.b notifplaying
  578.  move.b 1(a0),IDNUM
  579.  st backbeat
  580.  jsr MakeSomeNoise
  581.  movem.l (a7)+,d0-d7/a0-a6
  582.  
  583. .noscream
  584.  
  585.  move.w TempFrames,d0
  586.  sub.w d0,SecTimer(a0)
  587.  bge.s .nohiss
  588.  
  589.  jsr GetRand
  590.  lsr.w #6,d0
  591.  and.w #1,d0
  592.  add.w #17,d0
  593.  movem.l d0-d7/a0-a6,-(a7)
  594.  sub.l ObjectPoints,a1
  595.  add.l #ObjRotated,a1
  596.  move.l (a1),Noisex
  597.  move.w #800,Noisevol
  598.  move.w d0,Samplenum
  599.  move.b #1,chanpick
  600.  clr.b notifplaying
  601.  move.b 1(a0),IDNUM
  602.  st backbeat
  603.  jsr MakeSomeNoise
  604.  movem.l (a7)+,d0-d7/a0-a6
  605.  
  606.  Jsr GetRand
  607.  lsr.w #6,d0
  608.  and.w #255,d0
  609.  add.w #300,d0
  610.  move.w d0,SecTimer(a0)
  611.  
  612. .nohiss:
  613.  
  614.  move.b ObjInTop(a0),ViewerTop
  615.  move.b PLR1_StoodInTop,TargetTop
  616.  move.l PLR1_Roompt,ToRoom
  617.  move.l objroom,FromRoom
  618.  move.w newx,Viewerx
  619.  move.w newz,Viewerz
  620.  move.w PLR1_xoff,Targetx
  621.  move.w PLR1_zoff,Targetz
  622.  move.l PLR1_yoff,d0
  623.  asr.l #7,d0
  624.  move.w d0,Targety
  625.  move.w 4(a0),Viewery
  626.  jsr CanItBeSeen
  627.  
  628.  clr.b 17(a0)
  629.  
  630.  tst.b CanSee
  631.  beq .carryonprowling
  632.  
  633.  move.b #1,17(a0)
  634.  
  635. .carryonprowling:
  636.  
  637.  move.b ObjInTop(a0),ViewerTop
  638.  move.b PLR2_StoodInTop,TargetTop
  639.  move.l PLR2_Roompt,ToRoom
  640.  move.l objroom,FromRoom
  641.  move.w newx,Viewerx
  642.  move.w newz,Viewerz
  643.  move.w PLR2_xoff,Targetx
  644.  move.w PLR2_zoff,Targetz
  645.  move.l PLR2_yoff,d0
  646.  asr.l #7,d0
  647.  move.w d0,Targety
  648.  move.w 4(a0),Viewery
  649.  jsr CanItBeSeen
  650.  
  651.  tst.b CanSee
  652.  beq .carryonprowling2
  653.  
  654.  or.b #2,17(a0)
  655.  
  656. .carryonprowling2:
  657.  
  658.  move.w 12(a0),GraphicRoom(a0)
  659.  
  660.  rts
  661.  
  662. *************************************************
  663.  
  664. NastyAttackPLR2:
  665.  
  666.  move.w 12(a0),FromZone
  667.  bsr CheckTeleport
  668.  tst.b OKTEL
  669.  beq.s .notel2
  670.  move.l floortemp,d0
  671.  asr.l #7,d0
  672.  add.w d0,4(a0)
  673.  bra .NoMunch2
  674. .notel2:
  675.  
  676.  move.w PLR2_xoff,newx
  677.  move.w PLR2_zoff,newz
  678.  move.w (a0),d1
  679.  move.l #ObjRotated,a6
  680.  move.l ObjectPoints,a1
  681.  lea (a1,d1.w*8),a1
  682.  lea (a6,d1.w*8),a6
  683.  move.w (a1),oldx
  684.  move.w 4(a1),oldz
  685.  move.w maxspd(a0),d2
  686.  muls.w TempFrames,d2
  687.  move.w d2,speed
  688.  move.w #80,Range
  689.  move.w 4(a0),d0
  690.  ext.l d0
  691.  asl.l #7,d0
  692.  sub.l #40*128,d0
  693.  move.l d0,newy
  694.  move.l d0,oldy
  695.  
  696.  move.b ObjInTop(a0),StoodInTop
  697.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  698.  clr.b canshove
  699.  clr.b GotThere
  700.  jsr HeadTowardsAng
  701.  move.w #%1000000000,wallflags
  702.  
  703.  move.l #%100000,CollideFlags
  704.  jsr Collision
  705.  tst.b hitwall
  706.  beq.s .nothitplayer
  707.  
  708.  move.w oldx,newx
  709.  move.w oldz,newz
  710.  st GotThere
  711.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  712.  bra .hitathing
  713.  
  714. .nothitplayer:
  715.  
  716.  move.l #%11111111110111000001,CollideFlags
  717.  jsr Collision
  718.  tst.b hitwall
  719.  beq.s .canmove
  720.  
  721.  move.w oldx,newx
  722.  move.w oldz,newz
  723.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  724.  bra .hitathing
  725.  
  726. .canmove:
  727.  
  728.  clr.b wallbounce
  729.  Jsr MoveObject
  730.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  731.  move.b StoodInTop,ObjInTop(a0)
  732.  
  733.  move.w AngRet,Facing(a0)
  734.  
  735. .hitathing:
  736.  
  737.  tst.b GotThere 
  738.  beq.s .NoMunch2
  739.  tst.w FourthTimer(a0)
  740.  ble.s .OKtomunch2
  741.  move.w TempFrames,d0
  742.  sub.w d0,FourthTimer(a0)
  743.  bra.s .NoMunch2
  744. .OKtomunch2:
  745.  move.w #20,FourthTimer(a0)
  746.  move.l PLR2_Obj,a2
  747.  add.b #2,damagetaken(a2)
  748.  
  749. .NoMunch2: 
  750.  
  751.  move.l objroom,a2
  752.  move.w (a2),12(a0)
  753.  move.w newx,(a1)
  754.  move.w newz,4(a1)
  755.  
  756.  move.w (a2),d0
  757.  move.l #ZoneBrightTable,a5
  758.  move.l (a5,d0.w*4),d0
  759.  tst.b ObjInTop(a0)
  760.  bne.s .okbit
  761.  swap d0
  762. .okbit:
  763.  move.w d0,2(a0)
  764.  
  765.  move.l ToZoneFloor(a2),d0
  766.  tst.b ObjInTop(a0)
  767.  beq.s .notintop
  768.  move.l ToUpperFloor(a2),d0
  769. .notintop:
  770.  sub.l #40*128,d0
  771.  asr.l #7,d0
  772.  move.w d0,4(a0)
  773.  
  774.  move.b damagetaken(a0),d2
  775.  beq .noscream
  776.  
  777.  sub.b d2,numlives(a0)
  778.  bgt .notdeadyet
  779.  
  780. ; cmp.b #1,d2
  781. ; ble.s .noexplode
  782.  
  783.  movem.l d0-d7/a0-a6,-(a7)
  784.  sub.l ObjectPoints,a1
  785.  add.l #ObjRotated,a1
  786.  move.l (a1),Noisex
  787.  move.w #400,Noisevol
  788.  move.w #14,Samplenum
  789.  move.b #1,chanpick
  790.  clr.b notifplaying
  791.  st backbeat
  792.  move.b 1(a0),IDNUM
  793.  jsr MakeSomeNoise
  794.  movem.l (a7)+,d0-d7/a0-a6
  795.  
  796.  movem.l d0-d7/a0-a6,-(a7)
  797.  move.w #0,d0
  798.  move.w #7,d2
  799.  move.w #31,d3
  800.  jsr ExplodeIntoBits
  801.  movem.l (a7)+,d0-d7/a0-a6
  802.  move.w #-1,12(a0)
  803.  move.w 12(a0),GraphicRoom(a0)
  804.  rts
  805.  
  806. .noexplode:
  807.  
  808.  movem.l d0-d7/a0-a6,-(a7)
  809.  sub.l ObjectPoints,a1
  810.  add.l #ObjRotated,a1
  811.  move.l (a1),Noisex
  812.  move.w #200,Noisevol
  813.  move.w screamsound,Samplenum
  814.  move.b #1,chanpick
  815.  clr.b notifplaying
  816.  st backbeat
  817.  move.b 1(a0),IDNUM
  818.  jsr MakeSomeNoise
  819.  movem.l (a7)+,d0-d7/a0-a6
  820.  move.l deadframe,8(a0)
  821.  move.w 12(a0),GraphicRoom(a0)
  822.  rts
  823.  
  824. .notdeadyet:
  825.  clr.b damagetaken(a0)
  826.  movem.l d0-d7/a0-a6,-(a7)
  827.  sub.l ObjectPoints,a1
  828.  add.l #ObjRotated,a1
  829.  move.l (a1),Noisex
  830.  move.w #200,Noisevol
  831.  move.w screamsound,Samplenum
  832.  move.b #1,chanpick
  833.  clr.b notifplaying
  834.  move.b 1(a0),IDNUM
  835.  st backbeat
  836.  jsr MakeSomeNoise
  837.  movem.l (a7)+,d0-d7/a0-a6
  838.  
  839. .noscream
  840.  
  841.  move.w TempFrames,d0
  842.  sub.w d0,SecTimer(a0)
  843.  bge.s .nohiss
  844.  
  845.  jsr GetRand
  846.  lsr.w #6,d0
  847.  and.w #1,d0
  848.  add.w #17,d0
  849.  movem.l d0-d7/a0-a6,-(a7)
  850.  sub.l ObjectPoints,a1
  851.  add.l #ObjRotated,a1
  852.  move.l (a1),Noisex
  853.  move.w #800,Noisevol
  854.  move.w d0,Samplenum
  855.  move.b #1,chanpick
  856.  clr.b notifplaying
  857.  move.b 1(a0),IDNUM
  858.  st backbeat
  859.  jsr MakeSomeNoise
  860.  movem.l (a7)+,d0-d7/a0-a6
  861.  
  862.  Jsr GetRand
  863.  lsr.w #6,d0
  864.  and.w #255,d0
  865.  add.w #300,d0
  866.  move.w d0,SecTimer(a0)
  867.  
  868. .nohiss:
  869.  
  870.  move.b ObjInTop(a0),ViewerTop
  871.  move.b PLR1_StoodInTop,TargetTop
  872.  move.l PLR1_Roompt,ToRoom
  873.  move.l objroom,FromRoom
  874.  move.w newx,Viewerx
  875.  move.w newz,Viewerz
  876.  move.w PLR1_xoff,Targetx
  877.  move.w PLR1_zoff,Targetz
  878.  move.l PLR1_yoff,d0
  879.  asr.l #7,d0
  880.  move.w d0,Targety
  881.  move.w 4(a0),Viewery
  882.  jsr CanItBeSeen
  883.  
  884.  clr.b 17(a0)
  885.  
  886.  tst.b CanSee
  887.  beq .carryonprowling
  888.  
  889.  move.b #1,17(a0)
  890.  
  891. .carryonprowling:
  892.  
  893.  move.b ObjInTop(a0),ViewerTop
  894.  move.b PLR2_StoodInTop,TargetTop
  895.  move.l PLR2_Roompt,ToRoom
  896.  move.l objroom,FromRoom
  897.  move.w newx,Viewerx
  898.  move.w newz,Viewerz
  899.  move.w PLR2_xoff,Targetx
  900.  move.w PLR2_zoff,Targetz
  901.  move.l PLR2_yoff,d0
  902.  asr.l #7,d0
  903.  move.w d0,Targety
  904.  move.w 4(a0),Viewery
  905.  jsr CanItBeSeen
  906.  
  907.  tst.b CanSee
  908.  beq .carryonprowling2
  909.  
  910.  or.b #2,17(a0)
  911.  
  912. .carryonprowling2:
  913.  
  914.  move.w 12(a0),GraphicRoom(a0)
  915.  
  916.  rts
  917.  
  918.  
  919.